package leetcode;

import java.util.ArrayList;
import java.util.List;

/**
 * @program: datastructureandalogorithm
 * @description:
 * @author: hmx
 * @create: 2022-01-08 13:53
 **/
public class LeetCode89 {

    //二进制数转格雷码
    public List<Integer> grayCode(int n) {
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < 1 << n; i++) {
            list.add((i >> 1) ^ i);
        }
        return list;
    }


    //对称生成
    /*public List<Integer> grayCode(int n) {
        List<Integer> list = new ArrayList<>();
        list.add(0);
        for (int i = 1; i <= n; ++i) {
            //当前集合的大小
            int m = list.size();
            //这里就是倒序把前面的[0 , 2 ^ (i - 1))的数倒序对其中的数进行 | (2 ^ (i - 1))的操作得到的新数添加到集合中,以达到题意
            for (int j = m - 1; j >= 0; --j) {
                list.add(list.get(j) | (1 << (i - 1)));
            }
        }

        return list;
    }*/

}
